﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using DomainDriver.DomainModeling.Example.DomainObjects;
using DomainDriver.DomainModeling.GenericUnitTesting;

namespace AutomotivePricingModel.UnitTests.DomainObjects
{
    [TestFixture]
    public class DummyDomainObjectTests : DomainObjectTestFixture<Guid, DummyDomainObject>
    {
        protected override DummyDomainObject CreateUniqueDomainObject()
        {
            return new DummyDomainObject();
        }

        protected override ICollection<DomainObjectModifier<Guid, DummyDomainObject>> GetDomainObjectModifiers()
        {
            List<DomainObjectModifier<Guid, DummyDomainObject>> modifiers = new List<DomainObjectModifier<Guid, DummyDomainObject>>();
            modifiers.Add((DummyDomainObject domainObject) => domainObject.AddChild(m_GuidUpdateValue));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.AddChild(m_GuidUpdateValue2));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.RemoveChild(m_GuidUpdateValue));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.AddChild(m_GuidUpdateValue3));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.RemoveChild(m_GuidUpdateValue3));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.RemoveChild(m_GuidUpdateValue2));
            modifiers.Add((DummyDomainObject domainObject) => domainObject.Index = m_IntUpdateValue3);
            modifiers.Add((DummyDomainObject domainObject) => domainObject.Name += m_StringUpdateValue);
            modifiers.Add((DummyDomainObject domainObject) => domainObject.Name = null);
            modifiers.Add((DummyDomainObject domainObject) => domainObject.Parent = m_GuidUpdateValue);
            modifiers.Add((DummyDomainObject domainObject) => domainObject.Parent = null);
            return modifiers;
        }

        [Test]
        public override void VerifyDomainObjectFunctionality()
        {
            base.VerifyDomainObjectFunctionality();
        }

        [Test]
        public void VerifyGetPropertyName()
        {
            DummyDomainObject domainObject = new DummyDomainObject();
            string parentPropName = domainObject.GetPropertyName((DummyDomainObject dObj) => dObj.Parent);
            Assert.AreEqual("Parent", parentPropName);
        }
    }
}